package com.tyning.newcode.jz30;

//剑指 Offer 30. 包含min函数的栈
//定义栈的数据结构，请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中，调用 min、push 及 pop 的时间复杂度都是 O(1)。
//
//
//
//示例:
//
//MinStack minStack = new MinStack();
//minStack.push(-2);
//minStack.push(0);
//minStack.push(-3);
//minStack.min();   --> 返回 -3.
//minStack.pop();
//minStack.top();      --> 返回 0.
//minStack.min();   --> 返回 -2.
//
//
//提示：
//
//各函数的调用总次数不超过 20000 次
//
//
//注意：本题与主站 155 题相同：https://leetcode-cn.com/problems/min-stack/
//
//通过次数94,341提交次数163,376
// https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/


import java.util.Stack;

public class Solution {
    public static void main(String[] args) {
        MinStack minStack = new MinStack();
        minStack.push(-2);
        minStack.push(0);
        minStack.push(-3);
        System.out.println(minStack.min());   //--> 返回 -3.
        minStack.pop();
        System.out.println(minStack.top());     // --> 返回 0.
        System.out.println(minStack.min());   //--> 返回 -2.
    }

//    class MinStack {
//
//        private Stack<Integer> stack;
//        private Stack<Integer> minStack;
//
//        /** initialize your data structure here. */
//        public MinStack() {
//            stack = new Stack<>();
//        }
//
//        public void push(int x) {
//            stack.push(x);
//            if (stack.isEmpty()){
//                minStack.push(x);
//            } else {
//                if (minStack.peek() >= x) {
//                    minStack.push(x);
//                }
//            }
//        }
//
//        public void pop() {
//            int popvalue = stack.pop();
//            if (minStack.peek() == popvalue) {
//                minStack.pop();
//            }
//        }
//
//        public int top() {
//            return stack.isEmpty() ? -1 : stack.peek();
//        }
//
//        public int min() {
//            return minStack.isEmpty() ? -1 : minStack.peek();
//        }
//    }
}
